/**
 * 正确的Mastra客户端Agent功能测试
 * 使用 @mastra/client-js 进行测试
 */

import { MastraClient } from '@mastra/client-js';

console.log('🚀 开始Mastra客户端Agent功能验证...\n');

// 创建Mastra客户端
const client = new MastraClient({
  baseUrl: 'http://localhost:4111',
  retries: 3,
  backoffMs: 300,
  maxBackoffMs: 5000,
});

console.log('📡 Mastra客户端已创建，连接到:', 'http://localhost:4111');

async function testGameMasterAgent() {
  console.log('\n📋 1. 测试游戏主控Agent...');
  
  try {
    console.log('   🔄 调用游戏主控Agent开始新游戏...');
    
    const result = await client.agent.run({
      agentId: 'gameMasterAgent',
      messages: [
        {
          role: 'user',
          content: `请开始一个新的赛博侦探游戏。
          
          游戏配置：
          - 难度：normal
          - 主题：办公室
          - 嫌疑人数量：3
          - 玩家档案：{"name": "测试玩家", "experience": "新手"}
          
          请使用 game-master 工具执行 start_game 操作，创建完整的游戏会话。`
        }
      ]
    });

    console.log('   ✅ 游戏主控Agent响应成功！');
    console.log('   📝 响应文本:', result.text?.substring(0, 200) + '...');
    console.log('   🔧 工具调用数量:', result.toolCalls?.length || 0);
    
    if (result.toolCalls && result.toolCalls.length > 0) {
      console.log('   🎯 工具调用结果:', JSON.stringify(result.toolCalls[0].result, null, 2).substring(0, 300) + '...');
    }
    
    return { success: true, result };
  } catch (error) {
    console.log('   ❌ 游戏主控Agent测试失败');
    console.log('   📝 错误:', error.message);
    return { success: false, error };
  }
}

async function testSuspectDialogueAgent() {
  console.log('\n📋 2. 测试嫌疑人对话Agent...');
  
  try {
    console.log('   🔄 调用嫌疑人对话Agent...');
    
    const result = await client.agent.run({
      agentId: 'suspectDialogueAgent',
      messages: [
        {
          role: 'user',
          content: `请模拟一个谨慎内向的秘书角色，回答侦探的问题："你当时在哪里？"
          
          角色信息：
          - 姓名：李秘书
          - 性格：谨慎内向
          - 背景：工作认真的秘书
          - 不在场证明：当时在整理文件
          - 可疑程度：4/10
          - 是否真凶：否
          
          请使用 dialogue-management 工具生成自然的对话回应。`
        }
      ]
    });

    console.log('   ✅ 嫌疑人对话Agent响应成功！');
    console.log('   📝 响应文本:', result.text?.substring(0, 200) + '...');
    console.log('   🔧 工具调用数量:', result.toolCalls?.length || 0);
    
    if (result.toolCalls && result.toolCalls.length > 0) {
      console.log('   💬 对话结果:', JSON.stringify(result.toolCalls[0].result, null, 2).substring(0, 300) + '...');
    }
    
    return { success: true, result };
  } catch (error) {
    console.log('   ❌ 嫌疑人对话Agent测试失败');
    console.log('   📝 错误:', error.message);
    return { success: false, error };
  }
}

async function runAllTests() {
  console.log('🎯 开始完整的Mastra客户端Agent功能验证...\n');
  
  const results = {
    gameMaster: null,
    suspectDialogue: null,
  };

  // 测试核心Agent
  results.gameMaster = await testGameMasterAgent();
  results.suspectDialogue = await testSuspectDialogueAgent();

  // 生成测试报告
  console.log('\n' + '='.repeat(60));
  console.log('📊 Mastra客户端Agent功能验证报告');
  console.log('='.repeat(60));

  const successCount = Object.values(results).filter(result => result?.success === true).length;
  const totalTests = Object.keys(results).length;

  console.log(`\n🎯 测试结果: ${successCount}/${totalTests} 通过 (${Math.round(successCount/totalTests*100)}%)`);

  console.log('\n📋 详细结果:');
  console.log(`🤖 游戏主控Agent: ${results.gameMaster?.success ? '✅ 通过' : '❌ 失败'}`);
  console.log(`💬 嫌疑人对话Agent: ${results.suspectDialogue?.success ? '✅ 通过' : '❌ 失败'}`);

  if (successCount === totalTests) {
    console.log('\n🎉 所有Agent功能验证通过！');
    console.log('✅ Mastra客户端集成验证成功！');
    console.log('🚀 可以进行前端集成测试了！');
  } else if (successCount >= totalTests * 0.5) {
    console.log('\n👍 部分Agent功能正常，继续调试其他Agent');
  } else {
    console.log('\n⚠️  Agent功能需要进一步调试');
  }

  console.log('\n🔧 技术细节:');
  console.log('- 使用 @mastra/client-js 进行调用');
  console.log('- API格式: client.agent.run({ agentId, messages })');
  console.log('- 连接地址: http://localhost:4111');
  console.log('- 工具调用: 通过result.toolCalls获取结果');

  console.log('\n' + '='.repeat(60));
  return results;
}

// 运行测试
runAllTests().catch(error => {
  console.error('❌ 测试运行失败:', error);
  process.exit(1);
});
